/**********************************************************************
  项目名称/Project          : 零基础入门学用物联网
  程序名称/Program name     : dht11esp8266温湿度读取
  团队/Team                 : 太极创客团队 / Taichi-Maker (www.taichi-maker.com)
  作者/Author               : 小黑
  日期/Date（YYYYMMDD）     : 20200617
  程序目的/Purpose          :
  演示用esp8266读取DHT11采集的温湿度值，并用串口打印采集到的温湿度数值
  使用的第三方库/Library
  DHT11库
  下载请前往
  http://www.taichi-maker.com/homepage/download/#library-download
  -----------------------------------------------------------------------
  本示例程序为太极创客团队制作的《零基础入门学用物联网》中示例程序。
  该教程为对物联网开发感兴趣的朋友所设计和制作。如需了解更多该教程的信息，请参考以下网页：
  http://www.taichi-maker.com/homepage/esp8266-nodemcu-iot/
***********************************************************************/

/********************###库文件声明###********************/
#include <dht11.h>//引入DHT11库

/********************###定义###********************/
dht11 DHT11;//定义传感器类型
#define DHT11PIN 2//定义传感器连接引脚。此处的PIN2在NodeMcu8266开发板上对应的引脚是D4
int LEDportBLUE1 = 16;
int GPIOport1_LED = 14;
unsigned long previousMillis;
int ledState;

/********************###子函数###********************/
double Fahrenheit(double celsius)
{
  return 1.8 * celsius + 32; //摄氏温度度转化为华氏温度
}

double Kelvin(double celsius)
{
  return celsius + 273.15; //摄氏温度转化为开氏温度
}
//打印输出温度
void tempPrint()
{
  DHT11.read(DHT11PIN); //更新传感器所有信息

  Serial.print("当前湿度 (%): ");
  Serial.println((float)DHT11.humidity, 2);

  Serial.print("当前温度 (℃): ");
  Serial.println((float)DHT11.temperature, 2);
  Serial.println("\n");
}
//LED闪烁
void ledBlink(int ledPin, uint32_t period)
{
  unsigned long currentMillis = millis();       /* 记录当前时间 */
  if (currentMillis - previousMillis >= period) /* 检查 "period"  ms是否通过 */
  {
    ledState = digitalRead(ledPin);
    previousMillis = currentMillis; /* 保存上次闪烁LED时 */
    if (ledState == LOW)            /* 如果LED关闭，则打开，反之亦然 */
    {
      ledState = HIGH;
    }
    else
    {
      ledState = LOW;
    }
    digitalWrite(ledPin, ledState); /* LED为ledState状态 */
    tempPrint();
  }
}

/********************###程序初始化###********************/
void setup()
{
  Serial.begin(115200);//设置波特率为115200
  Serial.println();
  pinMode(LEDportBLUE1, OUTPUT);
  pinMode(GPIOport1_LED, OUTPUT);
  digitalWrite(LEDportBLUE1, LOW);//低电平 打开LED
}

/********************###主函数###********************/
void loop()
{
  ledBlink(LEDportBLUE1, 2000);
}
